/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.edu.nju.software.greencreditsystem.service;

import cn.edu.nju.software.greencreditsystem.DAO.EnterpriseDAO;
import cn.edu.nju.software.greencreditsystem.DAO.EnvironmentFactorDAO;
import cn.edu.nju.software.greencreditsystem.DAO.EnvironmentStandardValueDAO;
import cn.edu.nju.software.greencreditsystem.DAO.FinancialFactorDAO;
import cn.edu.nju.software.greencreditsystem.DAO.FinancialStandardValueDAO;
import cn.edu.nju.software.greencreditsystem.DAO.SystemConstantDAO;
import cn.edu.nju.software.greencreditsystem.DAO.WarningTemplateDAO;
import cn.edu.nju.software.greencreditsystem.DTO.InputStandardValueListDTO;
import cn.edu.nju.software.greencreditsystem.DTO.OutputStandardValueDTO;
import cn.edu.nju.software.greencreditsystem.domain.EnvironmentFactor;
import cn.edu.nju.software.greencreditsystem.domain.EnvironmentStandardValue;
import cn.edu.nju.software.greencreditsystem.domain.FinancialFactor;
import cn.edu.nju.software.greencreditsystem.domain.FinancialStandardValue;
import cn.edu.nju.software.greencreditsystem.domain.SystemConstant;
import cn.edu.nju.software.greencreditsystem.domain.WarningTemplate;
import cn.edu.nju.software.greencreditsystem.factory.DAOFactory;
import java.util.ArrayList;
import java.util.List;

/**
 * 作者：韩天
 * 创建时间：2011-8-22
 * 类描述：设置的service封装类
 */
public class ConfigService {
    
    /**
     * 方法描述：银行取得特定企业环境指标设置
     * param：
     * return：
     */
    public List<OutputStandardValueDTO> get_EnIndexStandardValue(int enterpriseId){
        EnvironmentStandardValueDAO esvDAO = DAOFactory.getEnvironmentStandardValueDAOInstance();
        EnvironmentFactorDAO efDAO = DAOFactory.getEnvironmentFactorDAOInstance();
        List<EnvironmentFactor> indexList = efDAO.getAllIndexFactor();
        List<OutputStandardValueDTO> outValueDTOList = new ArrayList<OutputStandardValueDTO>();
        //取出所有环境指标的标准值
        for(int i=0; i<indexList.size(); i++){
            OutputStandardValueDTO outDTO = new OutputStandardValueDTO();
            outDTO.setFactorName(indexList.get(i).getName());
            outDTO.setStandardValue(esvDAO.get(enterpriseId, indexList.get(i).getId()).getStandardValue());
            outDTO.setChangeValue(esvDAO.get(enterpriseId, indexList.get(i).getId()).getChangeValue());
            outDTO.setType(esvDAO.get(enterpriseId, indexList.get(i).getId()).getType());
            outValueDTOList.add(outDTO);
        }
        return outValueDTOList;
    }
    
    /**
     * 方法描述：银行取得特定企业环境评分设置
     * param：
     * return：
     */
    public List<OutputStandardValueDTO> get_EnScoreStandardValue(int enterpriseId){
        EnvironmentStandardValueDAO esvDAO = DAOFactory.getEnvironmentStandardValueDAOInstance();
        EnvironmentFactorDAO efDAO = DAOFactory.getEnvironmentFactorDAOInstance();
        List<EnvironmentFactor> scoreList = efDAO.getAllScoreFactor();
        List<OutputStandardValueDTO> outValueDTOList = new ArrayList<OutputStandardValueDTO>();
        //取出所有环境指标的标准值
        for(int i=0; i<scoreList.size(); i++){
            OutputStandardValueDTO outDTO = new OutputStandardValueDTO();
            outDTO.setFactorName(scoreList.get(i).getName());
            outDTO.setStandardValue(esvDAO.get(enterpriseId, scoreList.get(i).getId()).getStandardValue());
            outDTO.setChangeValue(esvDAO.get(enterpriseId, scoreList.get(i).getId()).getChangeValue());
            outDTO.setType(esvDAO.get(enterpriseId, scoreList.get(i).getId()).getType());
            outValueDTOList.add(outDTO);
        }
        return outValueDTOList;
    }
    
    /**
     * 方法描述：银行取得特定企业财务监控设置
     * param：
     * return：
     */
    public List<OutputStandardValueDTO> get_FiFactorStandardValue(){
        FinancialStandardValueDAO fsvDAO = DAOFactory.getFinancialStandardValueDAOInstance();
        FinancialFactorDAO ffDAO = DAOFactory.getFinancialFactorDAOInstance();
        List<FinancialFactor> factorList = ffDAO.getAll();
        List<OutputStandardValueDTO> outValueDTOList = new ArrayList<OutputStandardValueDTO>();
        //取出所有环境指标的标准值
        for(int i=0; i<factorList.size(); i++){
            OutputStandardValueDTO outDTO = new OutputStandardValueDTO();
            outDTO.setFactorName(factorList.get(i).getName());
            outDTO.setStandardValue(fsvDAO.getStandardValue(factorList.get(i).getId()));
            outDTO.setChangeValue(fsvDAO.getChangeValue(factorList.get(i).getId()));
            outValueDTOList.add(outDTO);
        }
        return outValueDTOList;
    }
    
    /**
     * 方法描述：银行取得系统设置的一些变量
     * param：
     * return：
     */
    public double get_SystemConstant(String name){
        SystemConstantDAO scDAO = DAOFactory.getSystemConstantDAOInstance();
        return scDAO.get(name);
    }
    
    /**
     * 方法描述：银行设置系统设置的一些变量
     * param：
     * return：
     */
    public void set_SystemConstant(String name, double value){
        SystemConstantDAO scDAO = DAOFactory.getSystemConstantDAOInstance();
        scDAO.set(name, value);
    }
    
    
    /**
     * 方法描述：银行更改环境设置
     * param：
     * return：
     */
    public void set_EnStandardValue(InputStandardValueListDTO enValueList, int enterpriseId){
        EnterpriseDAO uDAO = DAOFactory.getEnterpriseDAOInstance();
        EnvironmentFactorDAO efDAO = DAOFactory.getEnvironmentFactorDAOInstance();
        EnvironmentStandardValueDAO esvDAO = DAOFactory.getEnvironmentStandardValueDAOInstance();
        //逐条添加环境标准值记录
        for(int i=0; i<enValueList.getFactorName().length; i++){
            EnvironmentStandardValue esv = esvDAO.get(enterpriseId, enValueList.getFactorName()[i]);
            if(esv != null){
                esv.setStandardValue(enValueList.getStandardValue()[i]);
                esv.setChangeValue(enValueList.getChangeValue()[i]);
                esv.setType(enValueList.getType()[i]);
                esvDAO.update(esv);
            }
        }
    }
    
    /**
     * 方法描述：银行更改财务监控设置
     * param：
     * return：
     */
    public void set_FiStandardValue(InputStandardValueListDTO valueList){
        FinancialFactorDAO ffDAO = DAOFactory.getFinancialFactorDAOInstance();
        FinancialStandardValueDAO fsvDAO = DAOFactory.getFinancialStandardValueDAOInstance();
        //逐条添加财务标准值记录
        for(int i=0; i<valueList.getFactorName().length; i++){
            if(valueList.getFactorName()[i] != null){
                FinancialStandardValue fsv1 = fsvDAO.getStandardValueObjects(ffDAO.getByName(valueList.getFactorName()[i]).getId());
                FinancialStandardValue fsv2 = fsvDAO.getChangeValueObjects(ffDAO.getByName(valueList.getFactorName()[i]).getId());
                fsv1.setValue(valueList.getStandardValue()[i]);
                fsvDAO.update(fsv1);
                fsv2.setValue(valueList.getStandardValue()[i]);
                fsvDAO.update(fsv2);
            }
        }
    }
    
    /**
     * 方法描述：银行更改警告模板设置
     * param：
     * return：
     */
    public void set_WarningTemplate(WarningTemplate template){
        WarningTemplateDAO wtDAO = DAOFactory.getWarningTemplateDAOInstance();
        wtDAO.update(template);
    }
}
